#include "MyRTC.h"
uint16_t MyRTC_Time[] = {2025, 1, 10, 12, 59, 55};	//定义全局的时间数组，数组内容分别为年、月、日、时、分、秒
uint16_t ArrayRead[6];//读入数组
    void MyRTC_Init(void){
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
    PWR_BackupAccessCmd(ENABLE);
    
    if(BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5){
  //寻找一个适合的时钟源 LSE 外部低速时钟  32.768khz
    RCC_LSEConfig(RCC_LSE_ON);
    while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == SET);
    
    //将RTC适配LSE时钟源，并开启RTC使能开关
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
    RCC_RTCCLKCmd(ENABLE);

    //增加等待延时，不是必须
    RTC_WaitForSynchro();
    RTC_WaitForLastTask();

    //分频设置
    RTC_SetPrescaler(32768 -1);
    RTC_WaitForLastTask();

    //设置秒计数器中的时间
    RTC_SetCounter(1736476998);
    RTC_WaitForLastTask();
    MyRTC_SetTime();
    BKP_WriteBackupRegister(BKP_DR1,0xA5A5);
    }
    else
    {
    //增加等待延时，不是必须
    RTC_WaitForSynchro();
    RTC_WaitForLastTask();

    }
  
}
//时间转为时间戳的形式
void MyRTC_SetTime(void){
    time_t time_ti;
    struct tm time_date;
    time_date.tm_year = MyRTC_Time[0] - 1900;
    time_date.tm_mon = MyRTC_Time[1] - 1;
    time_date.tm_mday = MyRTC_Time[2];
    time_date.tm_hour = MyRTC_Time[3];
    time_date.tm_min = MyRTC_Time[4];
    time_date.tm_sec = MyRTC_Time[5];
    time_ti = mktime(&time_date);
}

//时间戳转为时间的形式
void MyRTC_GetTime(){
	time_t time_cnt;		//定义秒计数器数据类型
	struct tm time_date;	//定义日期时间数据类型
	
	time_cnt = RTC_GetCounter() + 8 * 60 * 60;		//读取RTC的CNT，获取当前的秒计数器
													//+ 8 * 60 * 60为东八区的时区调整
	
	time_date = *localtime(&time_cnt);				//使用localtime函数，将秒计数器转换为日期时间格式
	
	MyRTC_Time[0] = time_date.tm_year + 1900;		//将日期时间结构体赋值给数组的时间
	MyRTC_Time[1] = time_date.tm_mon + 1;
	MyRTC_Time[2] = time_date.tm_mday;
	MyRTC_Time[3] = time_date.tm_hour;
	MyRTC_Time[4] = time_date.tm_min;
	MyRTC_Time[5] = time_date.tm_sec;
    
}
